﻿using System;
using Castle.Core.Logging;
using User.Global.Contracts.Membership;
using User.Global.Contracts.Message;
using User.Web.Contracts.Model;

namespace User.Web.Models
{
    /// <summary>
    /// Abstrakte Basisklasse für alle Models.
    /// Hier werden der Logger und die Messages "verwaltet"
    /// </summary>
    public abstract class ModelBase : IModelBase
    {
        /// <summary>
        /// Der Aktuell verwendete Logger für die jeweilige Klasse
        /// </summary>
        public ILogger Logger { get; set; }

        /// <summary>
        /// Hinzufügen einer Message zur Ausgabe.
        /// </summary>
        public IAddMessage AddMessage { get; set; }

        /// <summary>
        /// Setzten der Externen und internen Kommunikationsklasse für die passende Ausgabe.
        /// </summary>
        /// <param name="logger">Der Logger für das Filesystem</param>
        /// <param name="addMessage">die Messageanzeige.</param>
        public void SetCommunication(ILogger logger, IAddMessage addMessage)
        {
            if (logger == null)
            {
                throw new NullReferenceException("Logger is Null");
            }

            if (addMessage == null)
            {
                throw new NullReferenceException("AddMessage is Null");
            }

            Logger = logger;
            AddMessage = addMessage;
        }
    }
}
